<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vRNNkekEb4QNkDGZ1WJ4MsZZUCv0aBtfDByyjjZJZPjM2Gxpolm0z2lCDLiO4iAFv5dVme01UFviT0R/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG call - July 29th 2021</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #banners {
        align-items: center;
        background: white;
        display: block;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #banners #publish-banner {
        background-color: #e8f0fe;
        border-bottom: 1px #ccc solid;
        color: #202124;
        display: flex;
        flex: 1 1 0%;
        height: 60px;
        width: 100%;
      }

      #publish-banner-icon {
        display: flex;
        fill: #1967d2;
        margin: auto 20px;
      }

      #publish-banner-text {
        flex-grow: 1;
        margin: auto 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }

      #publish-banner-buttons {
        margin: auto 25px auto 0;
      }

      #publish-banner-buttons span {
        align-self: center;
        background-color: inherit;
        border: none;
        font-family: "Google Sans", Roboto, RobotoDraft, Helvetica, Arial, sans-serif;
        margin: 0 16px 0 32px;
      }

      #publish-banner-buttons a {
        color: #1967d2;
        cursor: pointer;
        font-family: "Google Sans", Roboto, RobotoDraft, Helvetica, Arial, sans-serif;
        font-size: 14px;
        font-weight: 500;
        line-height: 24px;
        text-decoration: none;
      }

      #banners #title-banner {
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        flex: 1 1 0%;
        height: 60px;
        width: 100%;
      }

      #banners #title-banner #title {
        flex-grow: 1;
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #banners #title-banner #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #banners #title-banner {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #banners #title-banner #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #banners #title-banner #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="banners"><div id="title-banner"><div id="title">WebPerfWG call - July 29th 2021</div><div id="interval"><span></span></div></div></div><div id="contents"><style type="text/css">.lst-kix_a831lga03k1f-3>li:before{content:"\0025cf  "}.lst-kix_7horhqeokdox-4>li:before{content:"\0025cb  "}.lst-kix_7horhqeokdox-5>li:before{content:"\0025a0  "}.lst-kix_a831lga03k1f-2>li:before{content:"\0025a0  "}.lst-kix_a831lga03k1f-4>li:before{content:"\0025cb  "}.lst-kix_a831lga03k1f-1>li:before{content:"\0025cb  "}.lst-kix_a831lga03k1f-5>li:before{content:"\0025a0  "}.lst-kix_7horhqeokdox-3>li:before{content:"\0025cf  "}.lst-kix_7horhqeokdox-7>li:before{content:"\0025cb  "}ul.lst-kix_7horhqeokdox-0{list-style-type:none}.lst-kix_a831lga03k1f-7>li:before{content:"\0025cb  "}.lst-kix_7horhqeokdox-0>li:before{content:"\0025cf  "}.lst-kix_7horhqeokdox-1>li:before{content:"\0025cb  "}ul.lst-kix_7horhqeokdox-1{list-style-type:none}.lst-kix_7horhqeokdox-8>li:before{content:"\0025a0  "}ul.lst-kix_7horhqeokdox-2{list-style-type:none}.lst-kix_a831lga03k1f-0>li:before{content:"\0025cf  "}.lst-kix_a831lga03k1f-6>li:before{content:"\0025cf  "}.lst-kix_a831lga03k1f-8>li:before{content:"\0025a0  "}ul.lst-kix_7horhqeokdox-3{list-style-type:none}ul.lst-kix_7horhqeokdox-4{list-style-type:none}.lst-kix_7horhqeokdox-2>li:before{content:"\0025a0  "}ul.lst-kix_7horhqeokdox-5{list-style-type:none}ul.lst-kix_7horhqeokdox-6{list-style-type:none}ul.lst-kix_7horhqeokdox-7{list-style-type:none}ul.lst-kix_7horhqeokdox-8{list-style-type:none}ul.lst-kix_mfcyvnz858ej-6{list-style-type:none}ul.lst-kix_mfcyvnz858ej-7{list-style-type:none}ul.lst-kix_mfcyvnz858ej-4{list-style-type:none}.lst-kix_mfcyvnz858ej-2>li:before{content:"\0025a0  "}ul.lst-kix_mfcyvnz858ej-5{list-style-type:none}ul.lst-kix_mfcyvnz858ej-8{list-style-type:none}.lst-kix_mfcyvnz858ej-1>li:before{content:"\0025cb  "}.lst-kix_mfcyvnz858ej-0>li:before{content:"\0025cf  "}ul.lst-kix_3jpzdop2lwkg-3{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-2{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-1{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-0{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-8{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-7{list-style-type:none}ul.lst-kix_mfcyvnz858ej-2{list-style-type:none}.lst-kix_7horhqeokdox-6>li:before{content:"\0025cf  "}ul.lst-kix_3jpzdop2lwkg-6{list-style-type:none}ul.lst-kix_mfcyvnz858ej-3{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-5{list-style-type:none}ul.lst-kix_mfcyvnz858ej-0{list-style-type:none}ul.lst-kix_3jpzdop2lwkg-4{list-style-type:none}ul.lst-kix_mfcyvnz858ej-1{list-style-type:none}.lst-kix_mfcyvnz858ej-3>li:before{content:"\0025cf  "}ul.lst-kix_bv9juek2x4vg-3{list-style-type:none}ul.lst-kix_bv9juek2x4vg-2{list-style-type:none}ul.lst-kix_bv9juek2x4vg-1{list-style-type:none}.lst-kix_kr2wqosflqhg-0>li:before{content:"\0025cf  "}ul.lst-kix_bv9juek2x4vg-0{list-style-type:none}.lst-kix_mfcyvnz858ej-4>li:before{content:"\0025cb  "}ul.lst-kix_bv9juek2x4vg-7{list-style-type:none}ul.lst-kix_bv9juek2x4vg-6{list-style-type:none}ul.lst-kix_bv9juek2x4vg-5{list-style-type:none}.lst-kix_kr2wqosflqhg-1>li:before{content:"\0025cb  "}ul.lst-kix_bv9juek2x4vg-4{list-style-type:none}.lst-kix_mfcyvnz858ej-5>li:before{content:"\0025a0  "}ul.lst-kix_a831lga03k1f-0{list-style-type:none}.lst-kix_kr2wqosflqhg-2>li:before{content:"\0025a0  "}.lst-kix_kr2wqosflqhg-4>li:before{content:"\0025cb  "}.lst-kix_mfcyvnz858ej-6>li:before{content:"\0025cf  "}.lst-kix_mfcyvnz858ej-8>li:before{content:"\0025a0  "}ul.lst-kix_a831lga03k1f-2{list-style-type:none}ul.lst-kix_a831lga03k1f-1{list-style-type:none}ul.lst-kix_a831lga03k1f-4{list-style-type:none}.lst-kix_kr2wqosflqhg-3>li:before{content:"\0025cf  "}ul.lst-kix_a831lga03k1f-3{list-style-type:none}.lst-kix_mfcyvnz858ej-7>li:before{content:"\0025cb  "}ul.lst-kix_a831lga03k1f-6{list-style-type:none}ul.lst-kix_a831lga03k1f-5{list-style-type:none}ul.lst-kix_a831lga03k1f-8{list-style-type:none}ul.lst-kix_a831lga03k1f-7{list-style-type:none}.lst-kix_bv9juek2x4vg-7>li:before{content:"\0025cb  "}.lst-kix_bv9juek2x4vg-8>li:before{content:"\0025a0  "}ul.lst-kix_bv9juek2x4vg-8{list-style-type:none}.lst-kix_3jpzdop2lwkg-3>li:before{content:"\0025cf  "}.lst-kix_3jpzdop2lwkg-2>li:before{content:"\0025a0  "}.lst-kix_3jpzdop2lwkg-4>li:before{content:"\0025cb  "}.lst-kix_3jpzdop2lwkg-1>li:before{content:"\0025cb  "}.lst-kix_3jpzdop2lwkg-5>li:before{content:"\0025a0  "}.lst-kix_bv9juek2x4vg-6>li:before{content:"\0025cf  "}.lst-kix_bv9juek2x4vg-5>li:before{content:"\0025a0  "}.lst-kix_kr2wqosflqhg-6>li:before{content:"\0025cf  "}.lst-kix_kr2wqosflqhg-8>li:before{content:"\0025a0  "}.lst-kix_bv9juek2x4vg-3>li:before{content:"\0025cf  "}.lst-kix_3jpzdop2lwkg-8>li:before{content:"\0025a0  "}.lst-kix_bv9juek2x4vg-4>li:before{content:"\0025cb  "}.lst-kix_kr2wqosflqhg-5>li:before{content:"\0025a0  "}.lst-kix_bv9juek2x4vg-1>li:before{content:"\0025cb  "}.lst-kix_3jpzdop2lwkg-6>li:before{content:"\0025cf  "}.lst-kix_3jpzdop2lwkg-7>li:before{content:"\0025cb  "}.lst-kix_bv9juek2x4vg-2>li:before{content:"\0025a0  "}.lst-kix_kr2wqosflqhg-7>li:before{content:"\0025cb  "}.lst-kix_bv9juek2x4vg-0>li:before{content:"\0025cf  "}ul.lst-kix_kr2wqosflqhg-8{list-style-type:none}ul.lst-kix_kr2wqosflqhg-4{list-style-type:none}ul.lst-kix_kr2wqosflqhg-5{list-style-type:none}ul.lst-kix_kr2wqosflqhg-6{list-style-type:none}ul.lst-kix_kr2wqosflqhg-7{list-style-type:none}ul.lst-kix_kr2wqosflqhg-0{list-style-type:none}ul.lst-kix_kr2wqosflqhg-1{list-style-type:none}ul.lst-kix_kr2wqosflqhg-2{list-style-type:none}ul.lst-kix_kr2wqosflqhg-3{list-style-type:none}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_3jpzdop2lwkg-0>li:before{content:"\0025cf  "}ol{margin:0;padding:0}table td,table th{padding:0}.c5{margin-left:108pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c3{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c4{margin-left:72pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c6{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left;height:11pt}.c11{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c8{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c9{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c2{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c12{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c1{padding:0;margin:0}.c7{color:inherit;text-decoration:inherit}.c15{margin-left:72pt}.c14{margin-left:36pt}.c13{font-style:italic}.c10{font-size:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c12"><h2 class="c8" id="h.jb91fkq6uigi"><span class="c11">Participants</span></h2><p class="c9"><span class="c0">Yoav Weiss, Nicol&aacute;s Pe&ntilde;a Moreno, Carol Rivero, Alex Christensen, Carine Bournez, Ian Clelland, Mariko Kosaka, Michal Mocny, Noam Helfman, Richard Smith, Sean Feng, Benjamin De Kosnik</span></p><p class="c6"><span class="c0"></span></p><h2 class="c8" id="h.u5xxcyh4rq7u"><span class="c11">Next Meeting</span></h2><p class="c9"><span class="c0">August 19, 2021 @ 10am PST / 1pm EST</span></p><p class="c6"><span class="c0"></span></p><h2 class="c8" id="h.l363atg7k3se"><span>Presentation - </span><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://docs.google.com/document/d/1uHkOIbxl3JygNprrqCbjzPQttI8M1G5wEtEehGtGEIU/edit&amp;sa=D&amp;source=editors&amp;ust=1627656342209000&amp;usg=AOvVaw1LNAhSgE3rY1JPX8T4K7H7">droppedEntriesCount</a></span><span>&nbsp;- </span><span class="c10">Nicol&aacute;s Pe&ntilde;a Moreno</span></h2><ul class="c1 lst-kix_kr2wqosflqhg-0 start"><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: Got feedback that the way we were considering shipping droppedEntriesCount could be confusing</span></li><li class="c3 li-bullet-0"><span class="c0">… When using PerfObserver you can use the buffered: flag to get entries that happened before you were observing</span></li><li class="c3 li-bullet-0"><span class="c0">… There’s a limit to the number of entries that the UA will store</span></li><li class="c3 li-bullet-0"><span class="c0">… Want to prevent unbounded use of these entries, especially if they’re not going to be accessed by the website</span></li><li class="c3 li-bullet-0"><span class="c0">… We have a max buffer size and suggested numbers for each in registry</span></li><li class="c3 li-bullet-0"><span class="c0">… Want to make it easier to know when those buffers have become full</span></li><li class="c3 li-bullet-0"><span class="c0">… Could be problem in cases for long-lived sites or sites with a lot of content</span></li><li class="c3 li-bullet-0"><span class="c0">… For example with ResourceTiming, with too many resources you could hit buffer limit</span></li><li class="c3 li-bullet-0"><span class="c0">… Or if you shift all the time you could hit LayoutShift buffer limit</span></li><li class="c3 li-bullet-0"><span class="c0">… Worked on droppedEntriesCount, provided by the observer callback</span></li><li class="c3 li-bullet-0"><span class="c0">… In call back you would receive count, which represents how many entries are dropped for that observer</span></li><li class="c3 li-bullet-0"><span class="c0">… Confusion is problem that if numbers are surfaced on every callback, could be confusing if developers see that count increases even though they’ve been observing entries</span></li><li class="c3 li-bullet-0"><span class="c0">… Once your buffer size is full, it starts increasing</span></li><li class="c3 li-bullet-0"><span class="c0">… Independent of the Observer itself</span></li><li class="c3 li-bullet-0"><span class="c0">… Developer wonders “why did I drop entries” if I have my callback collecting them</span></li><li class="c3 li-bullet-0"><span class="c0">… Main use-case is knowing if you dropped entries before you observed them</span></li><li class="c3 li-bullet-0"><span class="c0">… Partnered with webdev insights, to survey web developers</span></li><li class="c3 li-bullet-0"><span class="c0">… 272 developers</span></li><li class="c3 li-bullet-0"><span class="c0">… Tried to filter out those familiar with PerformanceObserver</span></li><li class="c3 li-bullet-0"><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 292.00px;"><img alt="" src="./WebPerfWG call - July 29th 2021_files/pasted image 0.png" style="width: 624.00px;<b> height</b>: 292.00px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></li><li class="c3 li-bullet-0"><span class="c0">… Trying to do survey to determine what’s the clearest way to surface information</span></li><li class="c3 li-bullet-0"><span class="c0">… We think best path forward is to ship simplest version based on responses we’ve seen (only expose the parameter on the first callback of the PO)</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Michael</b>: On topic of registering a second observer, it’s probably uncommon for the same consumer, a nuance I forgot about is that the reason we need to keep buffering is there are multiple consumers</span></li><li class="c3 li-bullet-0"><span class="c0">… Future consumers may still have same problem so you may need to continue buffering</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: Clarify that a single PO usually calls .observe() once, there may still be multiple POs in a frame</span></li><li class="c3 li-bullet-0"><span class="c0">… Typical use case where you have one observer for each entry type</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nic</b>: Applaud asking broader web developer community for their opinion</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: Change spec so it reflects change so only the initial callback will receive the value</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nic</b>: Will the subsequent callbacks have the value 0, or undefined, or missing?</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: Will look to see the best way of doing that</span></li><li class="c3 li-bullet-0"><span class="c0">… Dictionary makes it optional, so we may not need to send it</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Benjamin</b>: Curious about percentage of users who always sent buffered flag</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: 19%, reason is just “why not” if you’re trying to gather performance of your site, inject script that is minimally intrusive</span></li><li class="c3 li-bullet-0"><span class="c0">… Is it due to low awareness? Probably not, because 71% know about it</span></li><li class="c3 li-bullet-0"><span class="c0">… Maybe they’re looking at PaintTiming</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Yoav</b>: One theory is if you’re using buffered flag you’ll have some difference between browsers that support it and some that don’t</span></li><li class="c3 li-bullet-0"><span class="c0">… Agree it’d be a good followup question to that community</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: I don’t know what happens if you try to use buffered flag in a UA that doesn’t support it</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Yoav</b>: Does it throw?</span></li><li class="c3 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: I don’t think anything bad happens, it will simply ignore the parameter</span></li><li class="c3 li-bullet-0"><span class="c0">… Looks like all the latest browsers support it in wpt.fyi at least</span></li></ul><h2 class="c8" id="h.nqudiddpah16"><span class="c11">Issues</span></h2><ul class="c1 lst-kix_a831lga03k1f-0 start"><li class="c3 li-bullet-0"><span class="c0">Preload and `type`</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1 start"><li class="c4 li-bullet-0"><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/156&amp;sa=D&amp;source=editors&amp;ust=1627656342214000&amp;usg=AOvVaw0-puKAuMLW6fiBM6mVfMRZ">https://github.com/w3c/preload/issues/156</a></span></li><li class="c4 li-bullet-0"><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/118&amp;sa=D&amp;source=editors&amp;ust=1627656342215000&amp;usg=AOvVaw1P2n9rs79oD_Ln2US-pLh4">https://github.com/w3c/preload/issues/118</a></span><span class="c0">&nbsp;</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Yoav</b>: A while ago we had a discussion on Preload and how it should handle type-based selection</span></li><li class="c4 li-bullet-0"><span class="c0">… Started with variable fonts from 2018</span></li><li class="c4 li-bullet-0"><span class="c0">… Use case generally made sense but the thinking was that we already have the type attribute, which supports MIME types</span></li><li class="c4 li-bullet-0"><span class="c0">… Solution that I was pushing at the time was WebFont WG would modify MIME type for fonts, so we could use existing mechanism to just preload fonts in UAs that support them and nothing in other cases</span></li><li class="c4 li-bullet-0"><span class="c0">… Evergreen browsers all support font variations and WebP, and our solution of just Preloading the latest and greatest seemed to hold at that point</span></li><li class="c4 li-bullet-0"><span class="c0">… Now there was a recent addition at CSS working group for a supports=”” dimension as part of font src declaration to add various dimensions on features the UA supports on top of just the MIME type</span></li><li class="c4 li-bullet-0"><span class="c0">… MIME type remains woff/2, now added features like color fonts</span></li><li class="c4 li-bullet-0"><span class="c0">… Talking to them, it seems like on one hand this may fit as part of the mime type, but at the same time that all lates UAs support all latest features, may break with all those features added</span></li><li class="c4 li-bullet-0"><span class="c0">… At the same time we may have a more recent issue open where Eric Portis from Cloudinary says we can’t preload in face of AVIF since not all support AVIF yet. &nbsp;Also for JPEG-XL.</span></li><li class="c4 li-bullet-0"><span class="c0">… If we would want to Preload AVIF and WebP, the current statement would currently Preload both in browsers that support both, which is not a great solution</span></li><li class="c4 li-bullet-0"><span class="c0">… In the past we reached conclusion we didn’t need to complicate Preload further, but I think it may be time to re-open that decision</span></li><li class="c4 li-bullet-0"><span class="c0">… Also current situation where the current Preload process moving to CR and to WHATWG</span></li><li class="c4 li-bullet-0"><span class="c0">… Doesn’t necessarily mean that we cannot work on a solution to this problem in another branch or a PR against HTML or some other thing</span></li><li class="c4 li-bullet-0"><span class="c0">… Interested in folks thoughts about the problem and what would be a solution for it</span></li><li class="c4 li-bullet-0"><span class="c0">… Assuming the use-case is valid, thoughts on tackling it? &nbsp;Prior art? &nbsp;Preload in some cases but not negate other formats</span></li><li class="c4 li-bullet-0"><span class="c0">… Would tackling this now be a problem in a separate branch that doesn’t go to CR</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Carine</b>: Since we got green-light to go to CR, even though it was no longer deliverable for our charter, I think it’s fine</span></li><li class="c4 li-bullet-0"><span class="c0"><b>NPM</b>: Do you have a specific proposal for how to implement this? &nbsp;Or just asking for feedback?</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Yoav</b>: No concrete proposal, looking for feedback on appetite for tackling this</span></li><li class="c4 li-bullet-0"><span class="c0">… Next step would be to figure out an owner and come up with a concrete proposal</span></li><li class="c4 li-bullet-0"><span class="c0">… No objections to tackling this proposal, but no one is jumping to own it either</span></li><li class="c4 li-bullet-0"><span class="c0">… Figure out who can tackle it and how</span></li></ul><p class="c6 c14"><span class="c0"></span></p><ul class="c1 lst-kix_a831lga03k1f-0"><li class="c3 li-bullet-0"><span class="c0"><b>Nic</b>: sent out survey about how to run TPAC this week</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1 start"><li class="c4 li-bullet-0"><span class="c0">Only 7 total responses so far… &nbsp;RESPOND please</span></li><li class="c4 li-bullet-0"><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://docs.google.com/forms/d/1YDaqYv08VJnv47iEjxqcFgwA54Y6FG_suuEG_lscjL0/edit%23responses&amp;sa=D&amp;source=editors&amp;ust=1627656342217000&amp;usg=AOvVaw3xHxPF8L0VP2oTP8QZHPYR">Form is here</a></span></li></ul><p class="c6 c15"><span class="c0"></span></p><ul class="c1 lst-kix_a831lga03k1f-0"><li class="c3 li-bullet-0"><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/203&amp;sa=D&amp;source=editors&amp;ust=1627656342218000&amp;usg=AOvVaw0qCY5sg2vQhesPqkzkcaTm">Include Content Type · Issue #203 · w3c/resource-timing</a></span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1 start"><li class="c4 li-bullet-0"><span class="c0">Existing request to access content-type from resource-timing. Or something similar to get type of content.</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Use case came up</b>: Customers experimenting with new different image formats. From resource-timing, don’t know which gets served. Sometimes you can find from filename/url, this isn’t always possible. &nbsp;Some CDNs swap out images in-place with same URL.</span></li><li class="c4 li-bullet-0"><span class="c0">By segmenting resources by actual type returned, can correlate resource-timing data. Quantify improvements moving to new image formats…</span></li><li class="c4 li-bullet-0"><span class="c0">Potentially this is possible to do manually with XHR today already.</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Yoav</b>: There are different requirements mentioned in this issue.</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-2 start"><li class="c5 li-bullet-0"><span class="c0">Request Destination (i.e. is this loaded into an image)</span></li><li class="c5 li-bullet-0"><span class="c0">Content Type (i.e. what the server is declaring as the content type). But, servers lie! (gasp)</span></li><li class="c5 li-bullet-0"><span class="c0">How the format was analyzed (content-type vs mime-sniffing)</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1"><li class="c4 li-bullet-0"><span class="c0"><b>If any of this exposes new information</b>: TOA requirements.</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Nicol&aacute;s</b>: how often to servers lie about type?</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-2 start"><li class="c5 li-bullet-0"><span class="c0"><b>Nic</b>: Not just that, also often there is no extension.</span></li><li class="c5 li-bullet-0"><span class="c0">Maybe we can guess correctly 70-80% of the time.</span></li><li class="c5 li-bullet-0"><span><b>Yoav</b>: Actually for sophisticated image CDNs, the guess may be wrong </span><span class="c13">most</span><span class="c0">&nbsp;of the time. &nbsp;Because they are always doing transparent transcodes including formats.</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1"><li class="c4 li-bullet-0"><span class="c0"><b>Noam</b>: Is content sniffing specced or just browser-dependant?</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-2 start"><li class="c5 li-bullet-0"><span class="c0"><b>Yoav</b>: It is, but it may not be perfect.</span></li><li class="c5 li-bullet-0"><span>...Oh there is a dedicated spec for this: </span><span class="c2"><a class="c7" href="https://www.google.com/url?q=https://mimesniff.spec.whatwg.org/&amp;sa=D&amp;source=editors&amp;ust=1627656342219000&amp;usg=AOvVaw3n6c_29vNzHmM_UsFvV4ZX">https://mimesniff.spec.whatwg.org/</a></span></li><li class="c5 li-bullet-0"><span class="c0">Browsers may not follow this exactly, unsure, but all do something best effort.</span></li><li class="c5 li-bullet-0"><span class="c0">There exists some no-sniff header even!</span></li><li class="c5 li-bullet-0"><span class="c0">…(Cross-Origin-Resource-Blocking)?</span></li><li class="c5 li-bullet-0"><span class="c0">...Either way, if we did spec some way to expose type via sniffing, it would be in terms of the spec.</span></li><li class="c5 li-bullet-0"><span><b>Looks like the spec defines sniffing for formats</b>: […]. Missing a few we would need [avif]<br></span><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 209.33px;"><img alt="" src="./WebPerfWG call - July 29th 2021_files/Screen Shot 2021-07-29 at 1.46.46 PM.png" style="width: 624.00px;<b> height</b>: 209.33px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1"><li class="c4 li-bullet-0"><span class="c0"><b>Ian</b>: AFAIK there is no way to query browsers for this info with existing resources from JS. &nbsp;Should we start by exposing that?</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-2 start"><li class="c5 li-bullet-0"><span class="c0"><b>Yoav</b>: Potentially polifillable… but maybe we ask the Image community if they could use this.</span></li><li class="c5 li-bullet-0"><span class="c0">...Perhaps other resource types could use this as well?</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1"><li class="c4 li-bullet-0"><span class="c0"><b>Benjamin</b>: Is it possible that exposing less will actually help more? &nbsp;Do we really need to compare types?</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-2 start"><li class="c5 li-bullet-0"><span class="c0"><b>Yoav</b>: the resources are already being downloaded. &nbsp;The primary use case is [to understand the performance effects of different formats].</span></li></ul><ul class="c1 lst-kix_a831lga03k1f-1"><li class="c4 li-bullet-0"><span class="c0"><b>Michael</b>: I was thinking about the use case, to measure the performance impact where two different formats, to figure out which format impacts the page</span></li><li class="c4 li-bullet-0"><span class="c0">… In which case just having image type isn’t enough</span></li><li class="c4 li-bullet-0"><span class="c0">… Is it really just formats that are the factor here, are there other things that could be exposed?</span></li><li class="c4 li-bullet-0"><span class="c0">… And if not should this type of A/B testing be done a different way</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Yoav</b>: For other things you have Server-Timing, and for the image server you could use ST to clarify the decisions they’re taking and be able to measure that difference client-side</span></li><li class="c4 li-bullet-0"><span class="c0">… That is possible today</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Nic</b>: ServerTiming should help with most of the other cases here, e.g. other format you could even emit encoding level (br)</span></li><li class="c4 li-bullet-0"><span class="c0">… But with Content Type it’d be nice to not duplicate the C-T header in S-T</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Alex</b>: Had a few thoughts on MIME sniffing in general, while there is a spec, spec compliance is not great. &nbsp;None of the browsers are over 50% passing. &nbsp;I’m aware of strange things we do, but it’s kind of a last-ditch effort if we have nothing else.</span></li><li class="c4 li-bullet-0"><span class="c0">… I don’t think it’s terribly precise</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Yoav</b>: In the context of exposing the format to ResourceTiming would you say MIME sniffing would be a mistake, and we should just rely on C-T?</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Alex</b>: Relying on MIME sniffing may be complex.</span></li><li class="c4 li-bullet-0"><span class="c0"><b>Ian</b>: I feel like the MIME sniffing spec is the red-herring, I think the important type is what did the browser deduce, regardless of what spec or heuristics</span></li><li class="c4 li-bullet-0"><span class="c0">… Just report what the browser actually used</span></li><li class="c4 li-bullet-0"><span><b>Yoav</b>: I agree this is what matters, this spec seems important as a way for something for us to point to </span></li></ul></div></div><div id="footer"><span> <a target="_blank" title="Learn more about " href="https://docs.google.com/"></a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjox8TSLisl59O9XLayXKIzzLAmm-BGQyvKvdVU73a_pqQ9mWFaxtp2xlwlWNP9NZ-znbo2CH_4RCIskmvdk:0"></a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
function ca(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var da=ca(this);function ea(a,b){if(b)a:{var c=da;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}}var k;
if("function"==typeof Object.setPrototypeOf)k=Object.setPrototypeOf;else{var l;a:{var fa={a:!0},ha={};try{ha.__proto__=fa;l=ha.a;break a}catch(a){}l=!1}k=l?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ia=k;
function m(a,b){a.prototype=aa(b.prototype);a.prototype.constructor=a;if(ia)ia(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.m=b.prototype}ea("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var n=this||self;function p(){}function q(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function ja(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function ka(a,b){function c(){}c.prototype=b.prototype;a.m=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.C=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}}function r(a){return a};function t(a){t[" "](a);return a}t[" "]=p;function la(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};function ma(a){return la(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++na}}})}var na=1E3;function u(){}u.prototype.s=function(){return this.j||(Object.defineProperties(this,{j:{value:oa=oa+1|0,enumerable:!1}}),this.j)};u.prototype.toString=function(){var a=v(w(pa(this.constructor)))+"@";var b=(this.s()>>>0).toString(16);return a+v(b)};function x(){}m(x,u);x.prototype.h=function(a){this.g=a;if(a instanceof Object)try{a.v=this}catch(b){}};function qa(a){a.g instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.g):a.g.stack=Error().stack)}x.prototype.toString=function(){var a=w(pa(this.constructor)),b=this.l;return null==b?a:v(a)+": "+v(b)};
function ra(a){if(null!=a){var b=a.v;if(null!=b)return b}a instanceof TypeError?(b=new sa,b.l=v(a),qa(b),b.i=a,b.h(new TypeError(b)),a=b):(b=new y,b.l=v(a),qa(b),b.i=a,b.h(Error(b)),a=b);return a};function z(){}m(z,x);function A(){}m(A,z);function y(){}m(y,A);y.prototype.h=function(a){A.prototype.h.call(this,"__noinit__"===this.i?a:this.i)};function sa(){}m(sa,y);var oa=0;function ta(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(){}var ua,va;m(B,u);function wa(){wa=function(){};va=new C;ua=new D};function C(){}m(C,B);C.prototype.toString=function(){return""};function D(){}m(D,B);D.prototype.toString=function(){return"unknown"};function v(a){return null==a?"null":a.toString()}function xa(a){return 65536<=a?v(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+v(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function ya(a,b){var c=b,d=a.length,e;b=ta(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=ta(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function E(a,b){this.g=a;this.h=b}m(E,u);function w(a){if(0!=a.h){var b="L"+v(ma(a.g))+";";a=a.h;for(var c="",d=0;d<a;d=d+1|0)c=v(c)+"[";return v(c)+v(b)}return ma(a.g)}E.prototype.toString=function(){return"class "+v(w(this))};function pa(a){return la(a.prototype,"$$class/0",function(){return new E(a,0)})};function za(a){var b=a;try{var c;var d=F(a)[3];if(c="www.google.com"===G(d,!0)){var e=F(a);c="/url"===G(e[5],!0)}if(c){var f=Aa(a,"q");b=f?f:Aa(a,"url")}}catch(g){if(g=ra(g),!(g instanceof z))throw g.g;}return null!=b?b:""};function G(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var Ba=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function F(a){a=Ba.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function Aa(a,b){var c=a.indexOf(xa(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=ya(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=ya(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(xa(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=v(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+v(c.substr(e))):
(d=v(c.substr(0,b|0)),e=b=b+1|0,c=d+v(c.substr(e)));a=a.replace(/\+/g,c);return G(a,!1)};var Ca=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};var Da=/&/g,Ea=/</g,Fa=/>/g,Ga=/"/g,Ha=/'/g,Ia=/\x00/g,Ja=/[\x00&<>"']/;var H;a:{var Ka=n.navigator;if(Ka){var La=Ka.userAgent;if(La){H=La;break a}}H=""}function I(a){return-1!=H.indexOf(a)};function Ma(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var J;function K(a,b){this.i=a===Na&&b||"";this.j=Oa}K.prototype.h=!0;K.prototype.g=function(){return this.i};var Oa={},Na={};function L(a,b){this.i=b===M?a:""}L.prototype.h=!0;L.prototype.g=function(){return this.i.toString()};L.prototype.toString=function(){return this.i.toString()};function N(a){return a instanceof L&&a.constructor===L?a.i:"type_error:SafeUrl"}
var Pa=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Qa=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Ra=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Sa(a){if(a instanceof L)return a;a="object"==typeof a&&a.h?a.g():String(a);Ra.test(a)||(a="about:invalid#zClosurez");return new L(a,M)}
var M={},Ta=new L("about:invalid#zClosurez",M);var Ua={};function O(a,b,c){this.i=c===Ua?a:"";this.h=!0}O.prototype.g=function(){return this.i.toString()};O.prototype.toString=function(){return this.i.toString()};function Va(a,b,c,d){a=a instanceof L?a:Sa(a);b=b||n;c=c instanceof K?c instanceof K&&c.constructor===K&&c.j===Oa?c.i:"type_error:Const":c||"";return void 0!==d?b.open(N(a),c,d,void 0):b.open(N(a),c)};var Wa=I("Trident")||I("MSIE"),Xa=I("Edge")||Wa,Ya=I("Gecko")&&!(-1!=H.toLowerCase().indexOf("webkit")&&!I("Edge"))&&!(I("Trident")||I("MSIE"))&&!I("Edge"),Za=I("Macintosh");function $a(a){a&&"function"==typeof a.u&&a.u()};function P(){this.h=this.h;this.g=this.g}P.prototype.h=!1;P.prototype.u=function(){this.h||(this.h=!0,this.j())};P.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var ab=function(){if(!n.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{n.addEventListener("test",p,b),n.removeEventListener("test",p,b)}catch(c){}return a}();function Q(a,b){this.type=a;this.target=b;this.i=!1}Q.prototype.g=function(){this.i=!0};function R(a){Q.call(this,a?a.type:"");this.relatedTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.h=null;if(a){var b=this.type=a.type,c=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;var d=a.relatedTarget;if(d){if(Ya){a:{try{t(d.nodeName);var e=!0;break a}catch(f){}e=!1}e||(d=null)}}else"mouseover"==
b?d=a.fromElement:"mouseout"==b&&(d=a.toElement);this.relatedTarget=d;c?(this.clientX=void 0!==c.clientX?c.clientX:c.pageX,this.clientY=void 0!==c.clientY?c.clientY:c.pageY,this.screenX=c.screenX||0,this.screenY=c.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=
a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:bb[a.pointerType]||"";this.state=a.state;this.h=a;a.defaultPrevented&&R.m.g.call(this)}}ka(R,Q);var bb={2:"touch",3:"pen",4:"mouse"};R.prototype.g=function(){R.m.g.call(this);var a=this.h;a.preventDefault?a.preventDefault():a.returnValue=!1};var S="closure_listenable_"+(1E6*Math.random()|0);var cb=0;function db(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.i=e;this.key=++cb;this.h=this.o=!1}function eb(a){a.h=!0;a.listener=null;a.g=null;a.src=null;a.i=null};function T(a){this.src=a;this.g={};this.h=0}T.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var h=a[g];if(!h.h&&h.listener==b&&h.capture==!!d&&h.i==e)break a}g=-1}-1<g?(b=a[g],c||(b.o=!1)):(b=new db(b,this.src,f,!!d,e),b.o=c,a.push(b));return b};var U="closure_lm_"+(1E6*Math.random()|0),V={},fb=0;function gb(a,b,c,d,e){if(d&&d.once)return hb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)gb(a,b[f],c,d,e);return null}c=ib(c);return a&&a[S]?a.g(b,c,q(d)?!!d.capture:!!d,e):jb(a,b,c,!1,d,e)}
function jb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=q(e)?!!e.capture:!!e,h=kb(a);h||(a[U]=h=new T(a));c=h.add(b,c,d,g,f);if(c.g)return c;d=lb();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)ab||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(mb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");fb++;return c}
function lb(){function a(c){return b.call(a.src,a.listener,c)}var b=nb;return a}function hb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)hb(a,b[f],c,d,e);return null}c=ib(c);return a&&a[S]?a.h(b,c,q(d)?!!d.capture:!!d,e):jb(a,b,c,!0,d,e)}
function ob(a){if("number"!==typeof a&&a&&!a.h){var b=a.src;if(b&&b[S])b.i(a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(mb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);fb--;if(c=kb(b)){d=a.type;if(d in c.g){var e=c.g[d],f=Ca(e,a),g;(g=0<=f)&&Array.prototype.splice.call(e,f,1);g&&(eb(a),0==c.g[d].length&&(delete c.g[d],c.h--))}0==c.h&&(c.src=null,b[U]=null)}else eb(a)}}}
function mb(a){return a in V?V[a]:V[a]="on"+a}function nb(a,b){if(a.h)a=!0;else{b=new R(b,this);var c=a.listener,d=a.i||a.src;a.o&&ob(a);a=c.call(d,b)}return a}function kb(a){a=a[U];return a instanceof T?a:null}var pb="__closure_events_fn_"+(1E9*Math.random()>>>0);function ib(a){if("function"===typeof a)return a;a[pb]||(a[pb]=function(b){return a.handleEvent(b)});return a[pb]};function W(a){P.call(this);this.l=a;this.i={}}ka(W,P);var qb=[];function rb(a){Ma(a.i,function(b,c){this.i.hasOwnProperty(c)&&ob(b)},a);a.i={}}W.prototype.j=function(){W.m.j.call(this);rb(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function sb(a,b,c){b=void 0===b?!1:b;c=void 0===c?!1:c;P.call(this);this.i=a||document.body;this.s=!!b;this.A=!!c;this.l=new W(this);a=ja($a,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;b=this.i;c=this.B;var d="click";Array.isArray(d)||(d&&(qb[0]=d.toString()),d=qb);for(var e=0;e<d.length;e++){var f=gb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}m(sb,P);
sb.prototype.B=function(a){if(!(0!=a.h.button||Za&&a.ctrlKey||a.i))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=za(c);if(c!=d){a:{b=void 0;try{var e=F(d)[3];b=G(e,!0)}catch(h){h=ra(h);if(h instanceof z){b=!1;break a}throw h.g;}if(e=null!=b){e=(wa(),va);var f=ua;b=Object.is(e,f)||null==e&&null==f?b.toLocaleLowerCase():b.toLowerCase();e=".google.com"===b.substr(b.length-11|0,11)}b=
e}if(!b)if(this.A){c=za(d);if(Object.is(c,d)||null==c&&null==d)d="//www.google.com/url?q="+v(encodeURIComponent(d)),d=v(d)+"&sa=D";d+="&source=editors"}else d=this.s?c:d;f=d;b=void 0;d={target:"_blank",noreferrer:!0};c=window;if(f instanceof L)e=f;else{e="undefined"!=typeof f.href?f.href:String(f);if(!(e instanceof L))if(e="object"==typeof e&&e.h?e.g():String(e),Ra.test(e))e=new L(e,M);else{e=String(e);e=e.replace(/(%0A|%0D)/g,"");var g=e.match(Qa);e=g&&Pa.test(g[1])?new L(e,M):null}e=e||Ta}f=d.target||
f.target;g=[];for(b in d)switch(b){case "width":case "height":case "top":case "left":g.push(b+"="+d[b]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(b+"="+(d[b]?1:0))}b=g.join(",");if((I("iPhone")&&!I("iPod")&&!I("iPad")||I("iPad")||I("iPod"))&&c.navigator&&c.navigator.standalone&&f&&"_self"!=f)b="A",g=document,b=String(b),"application/xhtml+xml"===g.contentType&&(b=b.toLowerCase()),g=b=g.createElement(b),e=e instanceof L?e:Sa(e),g.href=N(e),b.setAttribute("target",f),
d.noreferrer&&b.setAttribute("rel","noreferrer"),d=document.createEvent("MouseEvent"),d.initMouseEvent("click",!0,!0,c,1),b.dispatchEvent(d);else if(d.noreferrer){if(c=Va("",c,f,b),d=N(e),c){Xa&&-1!=d.indexOf(";")&&(d="'"+d.replace(/'/g,"%27")+"'");c.opener=null;Ja.test(d)&&(-1!=d.indexOf("&")&&(d=d.replace(Da,"&amp;")),-1!=d.indexOf("<")&&(d=d.replace(Ea,"&lt;")),-1!=d.indexOf(">")&&(d=d.replace(Fa,"&gt;")),-1!=d.indexOf('"')&&(d=d.replace(Ga,"&quot;")),-1!=d.indexOf("'")&&(d=d.replace(Ha,"&#39;")),
-1!=d.indexOf("\x00")&&(d=d.replace(Ia,"&#0;")));d='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+d+'">';if(void 0===J)if(b=null,(e=n.trustedTypes)&&e.createPolicy){try{b=e.createPolicy("goog#html",{createHTML:r,createScript:r,createScriptURL:r})}catch(h){n.console&&n.console.error(h.message)}J=b}else J=b;d=(b=J)?b.createHTML(d):d;d=new O(d,null,Ua);(c=c.document)&&c.write&&(c.write(d instanceof O&&d.constructor===O?d.i:"type_error:SafeHtml"),c.close())}}else(c=
Va(e,c,f,b))&&d.noopener&&(c.opener=null);a.g();break}}b=b.parentNode}};function tb(a,b,c){new sb(a,void 0===b?!1:b,void 0===c?!1:c)}var X=["DOCS_installLinkReferrerSanitizer"],Y=n;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===tb?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=tb;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer( undefined,  true ,  false );</script></body></html>